package main

import "fmt"

/**
	hhh say
	hhh = {make 3333}
	jjj say
	jjj = {sj 4444}
 */

type xxx interface {
	say()
}

type hhh struct {
	name string
	id int
}

type jjj struct {
	addr string
	num int
}

func (tmp *hhh) say()  {
	fmt.Println("hhh say")
	fmt.Println("hhh =", *tmp)
}

func (tmp *jjj) say()  {
	fmt.Println("jjj say")
	fmt.Println("jjj =", *tmp)
}

func main()  {
	//声明一个xxx接口类型的变量
	var i xxx
	a := hhh{"make", 3333}
	b := jjj{"sj", 4444}
	//这里要注意接受者类型，数据类型自己调用自己绑定的函数时可以不用在意接受者类型，但是利用接口实现数据类型绑定的函数时，要注意接受者类型
	i = &a
	i.say()
	i = &b
	i.say()
}
